// pages/clock/clock.js
const app = getApp();

Component({

  /**
   * 页面的初始数据
   */
  data: {
    clock_work_process: false,
    task: null, // 当前的任务对象
    isWorking: false, // 是否正在任务执行计时中
    isResting: false, // 是否正在放松计时中
    workTime: 25, // 工作时间 25 分钟
    restTime: 5, // 小间隔休息时间 5 分钟
    bigRestTime: 25, // 大间隔休息时间 25 分钟
    TIMES: 4, // 大间隔休息需要完成多少个工作时间
    restartTimes: 0, // 记录当前 执行了多少个番茄时间
    workSound: '', 
    workStartTipSound: null, // 工作开始提示音
    // restStartTipSound: null, // 休息开始提示音
    clock: null, // 时钟对象
    minutes: 0, // 时钟当前的分钟数
    seconds: 0, // 时钟当前的秒数
    isCounted: false // 数据统计标识，防止重复计入统计数据中
  },

  observers: {
    'minutes, seconds' (minutes, seconds) {
      // 时间结束，工作和休息的状态转换
      if (minutes === 0 && seconds === 0) {
        this.data.isWorking 
        ?
        this.setData({
          isWorking: false,
          isResting: true
        })
        :
        this.setData({
          isWorking: true,
          isResting: false
        })
      }
    },
    'isWorking, isResting' (isWorking, isResting) {
      // 根据当前的状态：是否在工作中，设定时钟对应的时长
      if (isWorking) {
        this.setData({
          minutes: this.data.workTime,
          seconds: 0,
          restartTimes: this.data.restartTimes + 1
        });
        // 播放上课音频
        const workStartTipSound = this.data.workStartTipSound;
        if (workStartTipSound) {
          workStartTipSound.src = '/lib/sounds/class-start.mp3';
          workStartTipSound.play();
        }
      }
      if (isResting) {
        this.data.restartTimes < this.data.TIMES
        ?
        this.setData({
          minutes: this.data.restTime,
          seconds: 0
        })
        :
        this.setData({
          minutes: this.data.bigRestTime,
          seconds: 0,
          restartTimes: 0
        });

        // 播放下课音频
        const workStartTipSound = this.data.workStartTipSound;
        if (workStartTipSound) {
          workStartTipSound.src = '/lib/sounds/rest-start.mp3';
          workStartTipSound.play();
        }

        // 更新统计数据
        if (this.data.task && !this.data.isCounted) {
          app.globalData.statistics.finishedTasksTotal += 1;
          // 已经被统计了
          this.setData({
            isCounted: true
          });
        }
      }
    }
  },

  methods: {
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
      this.setData({
        minutes: this.data.workTime,
        clock_work_process: app.globalData.operateLead.clock_work_process
      });
    },

    onShow (e) {
      // 给当前时钟加上任务
      let task = app.globalData.transferToClockData;

      if (task) {
        // 任务正在执行中的话，不允许更换任务
        if (this.data.isWorking || this.data.isResting) {
          wx.showModal({
            title: '提示',
            content: '有任务正在执行中，不允许中途更换！'
          });
          app.globalData.transferToClockData = undefined;
          return;
        }

        this.setData({
          task
        });
        // 清除任务缓存
        app.globalData.transferToClockData = undefined;
      }
    },

    // 开始计时
    startClocking () {
      const clock = setInterval(() => {
        let seconds = this.data.seconds;
        let minutes = this.data.minutes;

        if (seconds === 0) {
          minutes -= 1;
          seconds = 59;

          // 统计时钟数据
          if (this.data.isWorking || this.data.isResting) {
            app.globalData.statistics.clockTotalTime += 1;
          }
        } else {
          seconds -= 1;
        }

        this.setData({
          minutes,
          seconds
        });
      }, 1000);

      this.setData({
        clock
      });
    },

    activeTask () {
      wx.vibrateShort({
        type: 'heavy'
      });
      
      // 设置中是否开启音频提示
      if (app.globalData.setting.tomatoTopSound) {
        // 初始化音频资源
        // 很奇怪，createInnerAudioContext似乎是单例模式，如下同时使用时，只有最后一个生效
        const workStartSound = wx.createInnerAudioContext();
        // workStartSound.src = "/lib/sounds/class-start.mp3";
        
        // const restStartSound = wx.createInnerAudioContext();
        // restStartSound.src = "/lib/sounds/rest-start.mp3";
        
        this.setData({
          workStartTipSound: workStartSound,
          // restStartTipSound: restStartSound,
        });
      }

      // 根据setting，判断是否设置屏幕常亮
      wx.setKeepScreenOn({
        keepScreenOn: app.globalData.setting.isScreenLongActive,
        fail: () => {
          wx.showModal({
            title: '错误提示',
            content: '设置屏幕常亮失败！'
          });
        }
      });

      // 更新统计数据
      app.globalData.statistics.clockTimes += 1;

      this.setData({
        isWorking: true
      });

      this.startClocking();
    },

    quitTask () {
      wx.vibrateShort({
        type: 'heavy'
      });

      // 清除时间计时
      clearInterval(this.data.clock);
      // 清除屏幕常亮
      wx.setKeepScreenOn({
        keepScreenOn: false,
        fail: () => {
          wx.showModal({
            title: '错误提示',
            content: '取消屏幕常亮失败！'
          });
        }
      });
      // 销毁音频实例
      this.data.workStartTipSound && this.data.workStartTipSound.destroy();
      // this.data.restStartTipSound && this.data.restStartTipSound.destroy();
      // 重置当前数据
      this.setData({
        task: null, // 当前的任务对象
        isWorking: false, // 是否正在任务执行计时中
        isResting: false, // 是否正在放松计时中
        restartTimes: 0, // 记录当前 执行了多少个番茄时间
        clock: null, // 时钟对象
        minutes: this.data.workTime, // 时钟当前的分钟数
        seconds: 0, // 时钟当前的秒数
        workStartTipSound: null,
        // restStartTipSound: null,
        isCounted: false
      });
    },

    handleCloseLead (e) {
      const key = e.currentTarget.dataset.key;

      this.setData({
        [key]: false
      });

      app.globalData.operateLead[key] = false
    }
  }
})